// ignore_for_file: deprecated_member_use

import 'package:flutter/material.dart';
import 'package:getx/custom/customappbar.dart';
import 'package:get/get.dart';
import 'package:getx/fluttergetx/other_page.dart';

// ignore: must_be_immutable
class NavigationGetX extends StatefulWidget {
  String name;
  NavigationGetX({Key? key, required this.name}) : super(key: key);
  @override
  _NavigationGetXState createState() => _NavigationGetXState();
}

class _NavigationGetXState extends State<NavigationGetX> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: CustomAppbar(widget.name, Theme.of(context).primaryColor),
      body: Center(
        child: Column(
          // mainAxisAlignment: MainAxisAlignment.center,
          children: [
            RaisedButton(
              child: const Text(
                "Get.to打开到新的页面",
                style: TextStyle(
                  fontSize: 20,
                  color: Colors.white,
                ),
              ),
              onPressed: () {
                Get.to(
                  NextScreen(name: "Get.to 打开到新的页面"),
                );
                // 对应原生路由：
                // Navigator.push(
                //   context,
                //   MaterialPageRoute<void>(
                //     builder: (BuildContext context) {
                //       return NextScreen(name: "Go to Other Page");
                //     },
                //   ),
                // );
              },
            ),
            const SizedBox(
              height: 20,
            ),
            RaisedButton(
              child: const Text(
                "Get.back 返回",
                style: TextStyle(
                  fontSize: 20,
                  color: Colors.white,
                ),
              ),
              onPressed: () async {
                var data = await Get.to(
                  BackScreen(name: "Get.back 返回"),
                );
                // ignore: avoid_print
                print(data.toString());

                // 对应原生路由：
                // var data =
                //     await Navigator.push(context, MaterialPageRoute<void>(
                //   builder: (BuildContext context) {
                //     return BackScreen(name: "Get.back 返回");
                //   },
                // ));
                //  print(data.toString());
              },
            ),
            const SizedBox(
              height: 20,
            ),
            RaisedButton(
              child: const Text(
                "Get.off 打开新页面,并且用新页面替换旧页面,删除旧页面",
                style: TextStyle(
                  fontSize: 20,
                  color: Colors.white,
                ),
              ),
              onPressed: () {
                Get.off(
                  OffScreen(name: "打开新页面,并且用新页面替换旧页面,删除旧页面"),
                );
              },
            ),
            const SizedBox(
              height: 20,
            ),
            RaisedButton(
              child: const Text(
                "Get.offAll 打开新页面并删除之前的所有路由",
                style: TextStyle(
                  fontSize: 20,
                  color: Colors.white,
                ),
              ),
              onPressed: () {
                Get.offAll(
                  OffAllScreen(name: "打开新页面并删除之前的所有路由"),
                );
                // 对应原生路由：
                // Navigator.pushAndRemoveUntil(
                //   context,
                //   MaterialPageRoute<void>(
                //     builder: (BuildContext context) {
                //       return OffAllScreen(name: "打开新页面并删除之前的所有路由");
                //     },
                //   ),
                //   (Route<dynamic> route) => false,
                // );
              },
            ),
          ],
        ),
      ),
    );
  }
}





// 声明别名：

// abstract class Routes {
//   static const Initial = '/';
//   static const NextScreen = '/NextScreen';

// }



// 注册路由表：


// abstract class AppPages {
//   static final pages = [
//     GetPage(
//       name: Routes.Initial,
//       page: () => HomePage(),
//     ),
//     GetPage(
//       name: Routes.NextScreen,
//       page: () => NextScreen(),
//     ),
//   ];
// }



// 替换MaterialApp为GetMaterialApp：

// void main() {
//   runApp(GetMaterialApp(
//     debugShowCheckedModeBanner: false,
//     initialRoute: '/',
//     theme: appThemeData,
//     defaultTransition: Transition.fade,
//     getPages: AppPages.pages,
//     home: HomePage(),
//   ));
// }

// 使用
// 导航到下一个页面：
// Get.toNamed(Routes.NextScreen);

// 导航到下一个页面并删除前一个页面：
// Get.offNamed(Routes.NextScreen);

// 导航到下一个页面并删除以前所有的页面：
// Get.offAllNamed(Routes.NextScreen);

// 发送数据到别名路由：
// Get在这里接受任何东西，无论是一个字符串，一个Map，一个List，甚至一个类的实例。
// Get.toNamed(Routes.NextScreen, arguments: '新垣结衣');

// 获取参数：
// String name=Get.arguments;

// 动态网页链接:
// 像web一样携带参数，适合前端开发的风格。
// Get.offAllNamed("/NextScreen?device=phone&id=354&name=Enzo");

// 获取参数：
// int id = Get.parameters['id'];
// out: 354
// String name=Get.parameters['name'];

// 还可以这样定义路由别名：
      //  GetPage(
      //   name: '/profile/:user',
      //   page: () => UserProfile(),
      // ),

// 导航：
//Get.toNamed("/profile/34954");


// 在第二个页面上，通过参数获取数据
//print(Get.parameters['user']);
// out: 34954

// 中间件
// 在跳转前做些事情，比如判断是否登录，可以使用routingCallback来实现：
// GetMaterialApp(
//   routingCallback: (routing) {
//     if(routing.current == '/second'){
//      // 如果登录。。。
//     }
//   }
// )


